/**
 * 日志工具模块
 * 提供统一的日志记录功能，支持日志级别控制
 */

// 日志级别定义
const LOG_LEVELS = {
  DEBUG: 0,
  INFO: 1,
  WARN: 2,
  ERROR: 3,
  SUCCESS: 1
};

// 从环境变量获取日志级别，默认为INFO
const currentLogLevel = LOG_LEVELS[process.env.LOG_LEVEL?.toUpperCase()] ?? LOG_LEVELS.INFO;

/**
 * 记录日志信息
 * @param {string} message - 日志消息
 * @param {string} level - 日志级别 (debug, info, warn, error, success)
 */
function log(message, level = 'info') {
  const logLevel = LOG_LEVELS[level.toUpperCase()] ?? LOG_LEVELS.INFO;
  
  // 如果当前日志级别高于要打印的级别，则跳过
  if (logLevel < currentLogLevel) {
    return;
  }
  
  const timestamp = new Date().toLocaleTimeString('zh-CN', { 
    timeZone: 'Asia/Shanghai',
    hour12: false 
  });
  
  const levelEmoji = {
    debug: '🐛',
    info: 'ℹ️',
    warn: '⚠️',
    error: '❌',
    success: '✅'
  };
  
  const emoji = levelEmoji[level] || 'ℹ️';
  console.log(`[${timestamp}] ${emoji} ${message}`);
}

/**
 * 记录调试日志
 * @param {string} message - 日志消息
 */
function debug(message) {
  log(message, 'debug');
}

/**
 * 记录信息日志
 * @param {string} message - 日志消息
 */
function info(message) {
  log(message, 'info');
}

/**
 * 记录警告日志
 * @param {string} message - 日志消息
 */
function warn(message) {
  log(message, 'warn');
}

/**
 * 记录错误日志
 * @param {string} message - 日志消息
 */
function error(message) {
  log(message, 'error');
}

/**
 * 记录成功日志
 * @param {string} message - 日志消息
 */
function success(message) {
  log(message, 'success');
}

/**
 * 获取当前日志级别信息
 * @returns {Object} 日志级别信息
 */
function getLogLevelInfo() {
  const levelNames = Object.keys(LOG_LEVELS);
  const currentLevelName = levelNames.find(name => LOG_LEVELS[name] === currentLogLevel) || 'INFO';
  
  return {
    current: currentLevelName,
    available: levelNames,
    numeric: currentLogLevel
  };
}

module.exports = {
  log,
  debug,
  info,
  warn,
  error,
  success,
  getLogLevelInfo
};
